Spyder

Kennis maken met Spyder

Als je Spyder start, zie een scherm, dat er ongeveer als volgt uitziet:

Het scherm is opgedeeld in drie grote vakken, één links en twee aan de rechterzijde onder elkaar. Deze vakken worden in het engels panes genoemd. Het nederlandse equivalent voor pane is paneel. Boven deze drie vlakken zie je twee menubalken, en onderaan het scherm zie je een statusbalk. Schematisch:

In dit schema staat het groene gebied voor de Editor, het blauwe gebied voor het Console, en het rode gebied voor de Help Viewer.

Bovenste menubalk

In de bovenste menu-balk zie je de volgende opties:

Tweede menubalk

In de menu-balk daaronder zie je de volgende opties:

Statusbalk

In de statusbalk onderaan het scherm zie je

Linker pane: Editor

Het linker pane wordt de editor genoemd. De inhoud van het linker pane is bijvoorbeeld:

In dit voorbeeld zie je twee tabbladen. In elk zo'n tabblad wordt Python source code geplaatst. Door middel van een blauwe onderstreping zie je dat de Python source code die hoort bij een programma untitled0.py wordt getoond. In de Editor kun je programma-bestanden openen, bewerken en uitvoeren.

Pane rechtsboven: Help Viewer

In het pane rechtsboven zie je bijvoorbeeld:

Onderin dit pane zie je 4 tabbladen:

De blauwe balk boven het tabblad "Variable Explorer" geeft aan dat dit tabblad momenteel wordt getoond. De kolommen Name, Type, Size en Value zijn onderdeel van dit tabblad. Daarboven zie je een menubalk met de volgende opties:

Pane rechtsonder: Console

De inhoud van het pane rechtsonder is bijvoorbeeld:

Onderaan dit pane zijn er twee tabbladen:

Aan de blauwe balk boven het tabblad 'IPython Console' zie je dat dit tabblad wordt getoond. De menu-balk bovenaan het pane toont de opties

Python-statements invoeren in het console

In het console kun je python-statements invoeren. Bijvoorbeeld: a=10

Zodra je op de enter-toets hebt gedrukt, verschijnt er in de Variable Explorer een regel voor de variabele a.

Laten we in het console ook een list definiëren.

Dan wordt aan de Variable Explorer een regel voor de list toegevoegd:

Waarden van variabelen opvragen in het console

We vragen in het console de waarde van a op:

En ook de waarde van de list l:

Na drukken op de enter-toets volgt:

Help Viewer: Variable Explorer

Waarden van variabelen wijzigen in de Variable Explorer

Met Python-commando's kun je waarden van variabelen wijzigen in het console. Maar in de Variable Explorer kun je de waarden van variabelen ook wijzigen.

Eerst klik je in het value-veld van de te wijzigen variabele. De achtergrond van dat veld wordt dan blauw ten teken dat het gewijgd kan worden. Dan tik je de nieuwe waarde in. Zodra je op de enter-toets klikt wordt de nieuwe waarde aan de variabele toegekend.

Een list heeft meerdere waarden. Daar verloopt het wijzigingsproces iets anders:

Je dubbelklikt in het veld van de list. Dan verandert de blauwe kleur van het veld in een iets andere blauwe kleur en verschijnt er een nieuw window waarin je één de waarden van de list-items kunt wijzigen. Je klikt in het te wijzigen item. Dat item krijgt dan een blauwe kleur ten teken dat je een nieuwe waarde kunt gaan invullen. Je tikt de nieuwe waarde in.

Zodra je de nieuwe waarde hebt ingevoerd, wordt de knop 'Save and Close' aanklikbaar. Je klikt hierop, en de wijziging wordt doorgevoerd.

Variabelen verwijderen

Als je een variabele wilt verwijderen, kun je dat doen in de Variable Explorer:

Instellingen

Van een zwarte achtergrondkleur naar een witte

Als je Spyder anders wilt instellen, kies je Tools → Preferences.

Je komt op het Preferences-scherm:

In het middengedeelte van het Preferences-scherm kijken we welke mogelijkheden er bestaan voor het Syntax highlighting theme.

We kiezen in plaats van 'Spyder Dark' voor 'Spyder'.

Onder de Preview krijgen we een idee van wat het thema Spyder inhoudt. Als we besluiten over te gaan naar het lichtere thema, klikken we op Apply.

Spyder start opnieuw op, en ziet er nu anders uit:

Terug naar de default-instellingen van Spyder

Als je veranderingen hebt aangebracht in de instellingen van Spyder via de optie View → Panes, dan kun je terug naar de oorspronkelijke venster-instellingen via View → Window Layouts.

Nu weet ik niet wat het verschil is tussen de bovenste optie 'Spyder Default Layout' en de onderste optie 'Reset to Spyder Default'. Bij de keuze 'Reset to Spyder Default' gaat de eerder gekozen witte achtergrondkleur niet terug naar een zwarte achtergrondkleur.

Als je veranderingen hebt aangebracht in de instellingen van Spyder via de optie Preferences → Tools, kun je altijd terug naar de oorspronkelijke instellingen via de knop Preferences → 'Reset to Default'.

Debuggen

Hulpmiddelen bij debuggen

Het opsporen van fouten in een computerprogramma heet debuggen. Spyder kan behulpzaam zijn bij het opsporen van fouten. Zo is er de menukeuze Debug.

En er is een pane Breakpoints.

Om een idee te krijgen van wat daarmee kan maak ik in de Editor een python-programma.

Een programma debuggen

In de Editor van Spyder is een Python-programma ingelezen:

Als je dit programma uitvoert, verschijnt de melding 'list index out of range' in het console:

Als je nog geen nadere informatie hebt over het programma, kun je eigenlijk nog niet gaan debuggen, want je hebt geen idee van wat de bedoeling is vam het programma. Misschien is het wel de bedoeling van de auteur dat de melding "index out of range" wordt getoond, en dan werkt het programma goed. Maar goed, we kunnen wel proberen te achterhalen wat de oorzaak is van die melding.

Je start het debuggen door op het icoon te klikken. De cursor in de Editor komt dan bovenaan in het programma te staan bij het eerste Python-commando, en in het Console wordt ook aangegeven dat de cursor bij het eerste commando staat.

Dat eerste commando is een def-commando. Klik op het icoon om dat commando uit te voeren. Python zet dan de code die tot de functie behoort om in een andere code, die uiteindelijk door de machine kan worden geïnterpreteerd en uitgevoerd. In de Editor gaat de cursor naar het volgende commando, en dat is geen aanroep van een def-commando, maar de aanroep van de functie verwerk_bestand.

Als je er nu voor zou kiezen om opnieuw op de knop te klikken, dan gaat Spyder de hele functie verwerk_bestand uitvoeren, zonder dat je echt kunt kijken wat die functie doet. Nu wil je echter van elk commando in de in de functie weten wat ie doet. Je klikt nu op het icoon om de functie verwerk_bestand 'binnen te gaan'.

Binnen de functie verwerk_bestand kun je verder gaan door herhaald op de knop te klikken. In onderstaand plaatje springt de cursor van regel 2 naar regel 3.

Als de cursor van regel 3 naar regel 4 gaat, dan wordt regel 3 uitgevoerd. Daarin wordt er een string van 15 tekens gemaakt met de 'naam bestand'. Dit wordt zichtbaar in de Variable Explorer.

Van regel 3 naar 4:

Van regel 4 naar 5:

Als we van regel 5 naar 6 gaan, wordt regel 5 uitgevoerd, waarin een file-handler wordt gemaakt. Deze file-handler wordt getoond als TextIOWrapper-object in de Variable Explorer:

Als we van regel 6 naar 7 gaan, wordt een de eerste regel van het bestand MijnBestand.csv gelezen. De inhoud van die regel wordt opgenomen in de variabele r.

Als we van regel 7 naar 8 gaan, wordt de ingelezen regel gesplitist in een aantal variabelen. Het scheidingsteken is een puntkomma. Deze variabelen worden in een lijst geplaatst, die de naam v krijgt. Deze variablen krijgen de namen v[0], v[1] en v[2], omdat Python bij het tellen met 0 begint, net zoals bij verdiepingen en iemands leeftijd. v[3] bestaat niet.

Hier gaat het dus fout. Dat wordt al geconstateerd als we met de cursor op regel 8 staan, dus nog voordat de regel waarin v[3] voorkomt, wordt uitgevoerd. Je kunt nog wel een paar keer op de knop klikken, maar dat heeft voor de analyse waar het programma in de fout gaat geen zin.Je zult merken dat het programma wordt afgebroken.

We passen het programma in de Editor aan:

We plaatsen het programma weer in de debug-mode met de knop en laten dan het programma met de knop lopen tot aan het eerstvolgende breakpoint. Omdat we nog geen breakpoints hebben ingesteld, loopt het programma gewoon door tot het einde, of totdat er zich opnieuw een fout voordoet.

We zien dat er zich nog een keer een fout voordoet. Opnieuw krijgen we de foutmelding 'list index out of range'. Dankzij ons print-statement, waardoor de regels die wel ingelezen konden worden zijn afgedrukt in het console, weten we dat de fout waarop we zijn gestuit ligt nadat het record waarin 'van Vliet' voorkomt, was ingelezen.

Na het instellen van het breakpoint start je opnieuw een debug-sessie. Met de knop de debug-sessie vervolg je de sessie totdat het record met 'van Vliet' bereikt is. In de Variable Explorer zie je dan:

Door herhaald te klikken op de knop vervolg je nu regel voor regel het programma, totdat in de Console de foutmelding verschijnt. In de Variable Explorer en het Console zie je dan:

Nu moet je gaan verzinnen wat er aan de hand is met het record waarin 'van Someren-Boekhorst' voorkomt. Wat er mis is, is dat dat record niet in drie delen, maar in twee delen wordt gesplitst. Het veld v[3] bestaat dus niet, en kan in regel 8 niet afgedrukt worden.

Wat er fout is in dit programma, is dat er geen enkele controle is op de input. Als het gaat om een privé-programma, dan is er wellicht goed mee te leven, maar het is onacceptabel als tientallen, honderden of duizenden mensen met het programma zullen werken.